Programmable integrated circuits, such as programmable gate arrays, are general-purpose combinatorial or sequential digital components which leave the manufacturer in an unprogrammed state. The ultimate function of the programmable integrated circuit is determined by a designer who typically enters a representation of the desired function into a programming unit. The representation may be in a graphical schematic form, a text-based form, or a combination thereof. The programming unit, in turn, delivers an appropriate sequence of signals to the programmable integrated circuit for configuring programmable switches contained therein. The programmable switches can comprise fuses, antifuses, floating-gate MOSFETs, and RAM cells. Floating gate devices can be erased and reprogrammed, while the RAM-base devices can be reconfigured dynamically.
One type of programmable integrated circuit is known as a field programmable gate array (FPGA). An FPGA is a semicustom device based on an array of generic cells, each having a programmable function, surrounded by a programmable interconnect network. The interconnect network is programmed via programmable crosspoint switches contained therein. The combined programming of the cell functions and the interconnect network define the function of the FPGA. FPGAs are advantageous in providing a short design turnaround time in comparison to other types of gate arrays.
A general problem in computing, using either programmable logic devices or microprocessors, is one of unifying program and data in hardware for the purpose of computation. Since the beginning of computers, however, a central processing unit (CPU) and a memory have been constructed out of separate types of hardware circuits and structures. Using a similar non-unified paradigm for memory and processors, attempts are being made to incorporate RAM into an FPGA.
In the realm of software, LISP is one of a few languages which attempts to unify the program and data information structures. However, this unification is only done in software, and is not done in the hardware which executes the software.